home *** CD-ROM | disk | FTP | other *** search
/ Logiciels PC Special 3 / Logiciel PC - Hors-Serie 3.iso / Logs / outils / stsnd95 / YMFORMAT.TXT < prev   
Text File  |  1998-05-17  |  18KB  |  520 lines

  1.  
  2. ┌┬───────────────────────────────────────────────────────────────────────────┬┐
  3. ├┘                                                                           └┤
  4. │           ██┐ ██┐ █┐   █┐         ██████┐ ██████┐ ██┐     ██████┐           │
  5. │           ██│ ██│ ██┐ ██│         ██┌───┘ └─██┌─┘ ██│     ██┌───┘           │
  6. │           └████┌┘ ██████│         █████┐    ██│   ██│     █████┐            │
  7. │            └██┌┘  ██┌─██│         ██┌──┘    ██│   ██│     ██┌──┘            │
  8. │             ██│   ██│ ██│         ██│     ██████┐ ██████┐ ██████┐           │
  9. │             └─┘   └─┘ └─┘         └─┘     └─────┘ └─────┘ └─────┘           │
  10. │█▀▀▀▄ █▀▀▀█ █▀▀▀▀ █   █ █▄ ▄█ █▀▀▀▀ ██▄ █ ▀▀█▀▀ █▀▀▀█ ▀▀█▀▀  █    █▀▀▀█ ██▄ █│
  11. │██  █ ██  █ ██    ██  █ ██▀ █ ██▀▀  ██▀██   ██  ██▀▀█   ██   ██   ██  █ ██▀██│
  12. │▀▀▀▀  ▀▀▀▀▀ ▀▀▀▀▀ ▀▀▀▀▀ ▀▀  ▀ ▀▀▀▀▀ ▀▀  ▀   ▀▀  ▀▀  ▀   ▀▀   ▀▀   ▀▀▀▀▀ ▀▀  ▀│
  13. │                                                                             │
  14. ├┐               Written by Arnaud Carre. (leonard@mygale.org)               ┌┤
  15. └┴───────────────────────────────────────────────────────────────────────────┴┘
  16.  
  17.  
  18.     NEW: "YM3b" Format !!! See bellow...
  19.  
  20.     WARNING: YM4! format is changed !!!
  21.  
  22.  
  23.     Many people asked me how to find new YM files. Well, the problem is
  24. that it takes me too much time to convert new modules. Then I decide to give
  25. you my YM-File format, so you can generate YM-File by yourself !
  26.  
  27.  
  28.  
  29.     As you probably know, YM is only an YM2149 Chip emulator, not a true
  30. MC68000 emulator. (For the moment !). YM-Files does not contain any 68000
  31. code routine. A music-file is composed of YM2149 registers generated by the
  32. original play-routine for each 50th seconds. As the YM2149 has 14 registers
  33. 8 bits each, that means 14 bytes for 1/50 second, so 700 bytes for one
  34. second of soundchip.
  35.  
  36.     When I convert an ATARI music, I play the music on the ATARI, and I
  37. store YM2149 registers set each 1/50sec (Vertical Blank time, VBL) in a big
  38. file as follow:
  39.  
  40.     VBL1:
  41.         store reg0,reg1,reg2,...,reg12,reg13    (14 regs)
  42.     VBL2:
  43.         store reg0,reg1,reg2,...,reg12,reg13    (14 regs)
  44.  
  45.  
  46.                 ..........
  47.  
  48.  
  49.     VBLn:
  50.         store reg0,reg1,reg2,...,reg12,reg13    (14 regs)
  51.  
  52.  
  53.     The problem is that is takes a lot of disk-space. Just count: A 10
  54. minutes song will take 420000 bytes on disk. But don't panic, the music are
  55. compressed with LHARC method (using LHA program from Haruyasu Yoshizaki).
  56. To reach best compression ratio, I store registers in a different order:
  57.  
  58.  
  59.     VBL1 reg0, VBL2 reg0, VBL3 reg0 .... VBLn reg0
  60.  
  61.     VBL1 reg1, VBL2 reg1, VBL3 reg1 .... VBLn reg1
  62.  
  63.  
  64.                 ..........
  65.  
  66.  
  67.     VBL1 reg14,VBL2 reg14,VBL3 reg14.... VBLn reg14
  68.  
  69.  
  70.  
  71.         So, here is the old YM3 file format:
  72.  
  73.  
  74.     Offset    Size    Name    Value   Comments
  75.     0    4    ID    'YM3!'    File type Identificator.
  76.  
  77.     then YM2149 registers starts a offset 4.
  78.  
  79.     The number of used VBL for music can be computed as follow:
  80.  
  81.     nvbl = (ymfile_size-4)/14;
  82.  
  83.  
  84. ------------------------------------------------------------------------------
  85. WARNING:
  86.     The LHA compression must be called AFTER the file is generated. ALWAYS
  87.     USE THE HEADER TYPE 0 when compressing (-h0).
  88.     Ex: You just create your binary file, starting with 'YM3!' ID, then
  89.     all YM registers. The music is 2 minutes long, that means your
  90.     binary is 2*60*700 + 4 = 84004 bytes long. you must compress it before
  91.     using the file with YM.EXE: (ex: your binary is TEST.BIN)
  92.  
  93.     LHA a -h0 TEST.LHA TEST.BIN
  94.  
  95.     Then a file TEST.LHA is created, wich is DIRECTLY a valid YM file.
  96.     just type:
  97.  
  98.     ren test.lha test.ym
  99.  
  100.     Then you can hear the file with YM.EXE
  101.  
  102.         (I use LHA.EXE v2.13).
  103. ------------------------------------------------------------------------------
  104.  
  105.  
  106. ------------------------------------------------------------------------------
  107. WARNING:
  108.     Some old and specific music starts with header 'YM2!', don't use this
  109.     ID.
  110. ------------------------------------------------------------------------------
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117. SPECIAL: Register 13 !
  118. ----------------------
  119.  
  120.     Creating a binary with YM registers for each VBL is easy. However
  121. there is special case concerning register 13. Reg13 is used for the volume
  122. envelope wave-form on the YM2149. The problem is writing to that register
  123. "restarts" the wave-form at beginning. That is, you CAN'T access this regis-
  124. ter each VBL if the original play-routine does not. So, if the original
  125. player does not write to register 13 on VBL n, write 0xff value.
  126. (So when YM.EXE read 0xff as reg13, the internal emulator register is not
  127. updated).
  128.  
  129.  
  130. That's all for 'YM3!' file.
  131. ---------------------------
  132.  
  133.     That's all for the 'YM3!' format. As you see, it is very simple (then
  134. not very powerfull) but you can convert many atari soundchip tunes with that
  135. format. (Especially old game-music, wich use very simple play-routine, or
  136. AMSTRAD CPC music).
  137.  
  138.     But if you know the ATARI demos, you probably know there is many
  139. tricks used by sound-player to produce real-drums or distorted sound: sample
  140. for drums, additional tone synthesis using TIMER etc... The 'YM3!' format can
  141. not play such music so...
  142.  
  143.  
  144.  
  145.  
  146. NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW
  147. ---------------------------------------------------------------------------
  148.  
  149.     These days you can find many YM tunes on Internet World Wide Web. Many
  150. of these are generated with automatic program. (See the ATARI program written
  151. by Jochen Knaus). The problem is that for each music, the generating program
  152. must know the music time. (And even the loop position if it exists !). So I
  153. write a PC program (YMTOOL.EXE) wich:
  154.     -Read an YM file.
  155.     -Display infos about it.
  156.     -Search loop automaticly in the music.
  157.     -Save a new YM file with fine loop.
  158.  
  159. The new YM file supports the loop point to be at the middle of a music (not
  160. only at the beginning, as the YM3 format). So a new format is born: "YM3b".
  161. The only difference is "YM3b" instead of "YM3!" and the music file contains
  162. one DWORD (32bits integers) at the end of the file, wich contains the frame
  163. number at wich the loop restart.
  164. Ex: If a music is 5600 frames and the loop restarts at frame 432, just write
  165. "YM3b", then 5600*14 bytes of YM registers, then 432.
  166.  
  167. Go to my web-page to habe link to download YMTOOL.EXE or to find link to
  168. Jochen Knaus homepage:
  169.  
  170. www.mygale.org/09/leonard/
  171.  
  172.  
  173.  
  174. ┌┬───────────────────────────────────────────────────────────────────────────┬┐
  175. ├┘                                                                           └┤
  176. │                       ██┐ ██┐ █┐   █┐ ██┐                                   │
  177. │                       ██│ ██│ ██┐ ██│ ██│██┐                                │
  178. │                       └████┌┘ ██████│ ██████┐                               │
  179. │                        └██┌┘  ██┌─██│ └──██┌┘                               │
  180. │                         ██│   ██│ ██│    ██│                                │
  181. │                         └─┘   └─┘ └─┘    └─┘                                │
  182. │      █   █ █▀▀▀█ ██▀▀▀       █▀▀█  █▀▀▀█ █▀▀▀█ ██▄ █                        │
  183. │      ██▀▄█ ██▀▀█ ▀▀▀▀█       ██▀▀█ ██  █ ██▀█▀ ██▀██  ▄▄    ▄▄    ▄▄        │
  184. │      ▀   ▀ ▀▀  ▀ ▀▀▀▀▀       ▀▀▀▀▀ ▀▀▀▀▀ ▀▀  ▀ ▀▀  ▀  ▀▀    ▀▀    ▀▀        │
  185. │                                                                             │
  186. ├┐                                                                           ┌┤
  187. └┴───────────────────────────────────────────────────────────────────────────┴┘
  188.  
  189.  
  190.     The 'YM4!' format is not currently implemented in the YM emulator, but
  191. I have written the most complete format to play all "evoluated" music such as
  192. SCAVENGER or ETERNAL tunes. If you convert a music wich the player does not use
  193. any "hardware" trick such digi-drum or synth-tune, use 'YM3!' format describe
  194. above: it will be faster and easyer to create. (Almost all standart YM file
  195. existing around the world (exept DIGI-Drums ones) can be written in YM3
  196. format).
  197.  
  198.     If you want to convert a SPECIAL music wich use many tricks to produce
  199. strange sound, you must be familiar with ATARI-ST sound programing and follow
  200. next instructions...
  201.  
  202.  
  203.  
  204.  
  205. Additional sound effects used by strange-player are only two types differents:
  206.  
  207.  
  208.  
  209. 1) Digi-Drums
  210. --------------
  211.  
  212.  
  213.     Generally digi-drums is a bunch of sample in the orignal play-rout.
  214. You will have to localize and extract them. In the YM file, you have to
  215. store the sample with their respective size. (see next part)
  216.         when playing, a digi-drum is defined with one value: timer frequency
  217. to replay sample.
  218.  
  219.  
  220.  
  221. 2) Tone synthesis
  222. -----------------
  223.  
  224.  
  225.     To produce very funny sound, some player use the ATARI-ST timer
  226. controller to change YM2149 volume more than 1 time per VBL. Generally
  227. the routine in the player is as follow:
  228.  
  229. lab1:    move.l    #$08000f00,$ffff8800.w
  230.     move.l    #lab2,$134.w
  231.     rte
  232.  
  233. lab2:    move.l    #$08000000,$ffff8800.w
  234.     move.l    #lab1,$134.w
  235.     rte
  236.  
  237.     So the volume is set to 15 then to 0 then to 15 etc... many times
  238. in the same VBL at a given frequency. In fact, the volume switch always
  239. between 0 and vmax. So a tone-synthesis is define by two values: vmax and
  240. timer frequency.
  241.  
  242.  
  243.  
  244. 3) 'YM4!' File format:
  245. ----------------------
  246.  
  247.  
  248.     Here is the description of the binary YM4 file. After the file is
  249. created, you can compress it with LHA -h0 as above.
  250.  
  251.  
  252.     Legend:    BYTE        8bits integer.
  253.         WORD         16bits integer.
  254.         DWORD        32bits integer.
  255.         string[n]    Ascci string of n bytes long.
  256.         NT-String    NULL-Terminated string.
  257.  
  258.  
  259.         WARNING: All DWORD or WORD are stored in MOTOROLA order in the file
  260.          (INTEL reverse)
  261.  
  262.  
  263.  
  264.     Offset    Size    Type        Comment
  265.     0    4    DWORD        ID of YM4 format. ('YM4!')
  266.     4    8    string[8]    Check String ('LeOnArD!')
  267.     12    4    DWORD        Nb of valid VBL of the file.
  268.     16    4    DWORD        Song attributes (see bellow)
  269.     20    4    DWORD        Nb of digi-drum sample (can be 0)
  270.     24    4    DWORD        Frame loop start (generally 0)
  271.  
  272.     For each digidrum sample:
  273.     {
  274.     ..    4    DWORD        sample size
  275.         ..      ?       BYTES           sample data (8bits per sample)
  276.     }
  277.  
  278.     ..    ?    NT-String    Name of the song.
  279.     ..    ?    NT-String    Name of the author.
  280.     ..    ?    NT-String    Comments (Name of the YM converter !)
  281.     ..    ?            All YM2149 registers.
  282.     ..    4    DWORD        End-File check. ('End!')
  283.  
  284.  
  285.  
  286.  
  287.     So you've seen in the YM3 format that all 14 registers of the YM2149
  288. are saved in file each VBL. Now, I had to add 2 "virtual" registers to store
  289. extended information. So there is 16 bytes in the file for each VBL. Now the
  290. VBL number n will be noticed "Vn" and register m "Rm". First VBL is V0 and
  291. first register is R0. (R0 to R15)
  292.  
  293.     The file data block will be composed of:
  294.  
  295.     V0R0,V0R1,V0R2,....,V0R14,V0R15
  296.     V1R0,V1R1,V1R2,....,V1R14,V1R15
  297.     .....
  298.         This is the non-interleaved format block.
  299.  
  300.  
  301.  
  302.     The data block can be on a different form:
  303.  
  304.     V0R0,V1R0,V2R0,....,VnR0
  305.     V0R1,V1R1,V2R1,....,VnR1
  306.     ....
  307.     V0R15,V1R15,V2R15,....,VnR15
  308.  
  309.     This is the interleaved format block.
  310.  
  311.     Those who are reading till now have noticed that the YM3 format is
  312. an interleaved format. In fact, the YM4 format can be interleaved or not.
  313. (Interleaved format offers a very powerfull compression ratio when compressed
  314. with LHA).
  315.  
  316.  
  317.  
  318.     Let's see the DWORD "song attribute":
  319.     (bn represent the bit n of the DWORD)
  320.  
  321.     b0:    Set if Interleaved data block.
  322.     b1:    Set if the digi-drum samples are signed data.
  323.     b2:    Set if the digidrum is already in ST 4 bits format.
  324.  
  325.         b3-b31: Not used yet, MUST BE 0.
  326.  
  327.     Here come valid bits for standard 14 first registers:
  328.     (Same as YM3 Format.)
  329.     (- means Unused, X means used)
  330.  
  331.     NOTE: Now, digi-drum will be noticed DD and Timer-Synth will be
  332.           noticed TS.
  333.  
  334.  
  335.  
  336.         b7 b6 b5 b4 b3 b2 b1 b0
  337.     r0:      X  X  X  X  X  X  X  X        Period voice A
  338.     r1:     -  -  -  -  X  X  X  X          "      "   "
  339.     r2:      X  X  X  X  X  X  X  X        Period voice B
  340.     r3:     -  -  -  -  X  X  X  X          "      "   "
  341.     r4:      X  X  X  X  X  X  X  X        Period voice C
  342.     r5:     -  -  -  -  X  X  X  X          "      "   "
  343.     r6:     -  -  -  X  X  X  X  X        Noise period
  344.     r7:      X  X  X  X  X  X  X  X        Mixer control
  345.     r8:     -  -  -  X  X  X  X  X        Volume voice A
  346.     r9:     -  -  -  X  X  X  X  X        Volume voice B
  347.     r10:     -  -  -  X  X  X  X  X        Volume voice C
  348.     r11:     X  X  X  X  X  X  X  X        Waveform period.
  349.     r12:     X  X  X  X  X  X  X  X           "       "
  350.     r13:     -  -  -  -  X  X  X  X        Waveform shape.
  351.  
  352.     New "virtual" registers to store extra data:
  353.  
  354.     r14:     -  -  -  -  -  -  -  -        Frequency for DD1 or TS1.
  355.     r15:     -  -  -  -  -  -  -  -        Frequency for DD2 or TS2.
  356.  
  357.  
  358.     As we've seen, r13 has a particular status. If the value stored in
  359. the file is 0xff, YM emulator will not reset the waveform position.
  360.  
  361.     The YM4 format provides to start or run 1 TS and 1 DD during the
  362. same VBL.
  363.  
  364.  
  365.     You notice there is a least 28 free bits in the 14 standard
  366. registers. YM4 format use them to store "extra" information. Let's see
  367. the "extra" bits:
  368.  
  369.  
  370.  
  371.  
  372.     r1 free bits are used to code TS:
  373.     r1 bits b5-b4 is a 2bits code wich means:
  374.  
  375.     00:    No TS.
  376.     01:    TS running on voice A
  377.     10:    TS running on voice B
  378.     11:     TS running on voice C
  379.  
  380.     r1 bit b6 is only used if there is a TS running. If b6 is set, YM
  381. emulator must restart the TIMER to first position. (You must be VERY sound-
  382. chip specialist to hear the difference).
  383.  
  384.     r3 free bits are used to code a DD start.
  385.     r3 b5-b4 is a 2bits code wich means:
  386.  
  387.     00:    No DD
  388.     01:    DD starts on voice A
  389.     10:    DD starts on voice B
  390.     11:    DD starts on voice C
  391.  
  392.  
  393. WARNING:If a DD starts on voice V , the volume register corresponding to V
  394. (Ex r8 for voice A, r9 for B and r10 for C) contains the sample number in
  395. 5 low bits. (That mean you have 32 digiDrum max in a song)
  396.  
  397.  
  398.  
  399.     Concerning DD and TS, both effects need to be played at a given
  400. frequency. On the ATARI-ST, play routine use the MFP-TIMER chip. That is,
  401. any frequency can be coded on 11bits: 8bits for timer count, and 3bits
  402. for timer predivisor. The MFP runs at 2457600 Hz and has a preset of
  403. predivisor:
  404.  
  405.     000:    Timer stop.
  406.     001:    Prediv by 4
  407.     010:    Prediv by 10
  408.     011:    Prediv by 16
  409.     100:    Prediv by 50
  410.     101:    Prediv by 64
  411.     110:    Prediv by 100
  412.     111:    Prediv by 200
  413.  
  414.     The 8 bits timer count value is named TC and 3bits prediv value
  415.     is named TP.
  416.  
  417.     Some ex to endserstand how it works:
  418.  
  419.     TP    TC    Frequency (Hz)
  420.     1    28    (2457600/4)/28   = 21942 Hz
  421.     4    150    (2457600/50)/150 = 327 Hz
  422.  
  423.  
  424.  
  425. Encode:
  426. -------
  427.     TP for TS is stored in the 3 free bits of r6 (b7-b5)
  428.     TP for DD is stored in the 3 free bits of r8 (b7-b5)
  429.     TC for TS is stored in the 8 bits of r14
  430.     TC for DD is stored in the 8 bits of r15
  431.  
  432.     4bits volume value (vmax) for TS is stored in the 4 free bits of r5
  433. (b7-b4)
  434.  
  435.  
  436.  
  437.  
  438.  
  439. ┌─────────────────────────────────────────────────────────────────────────────┐
  440. │                                                                             │
  441. │                           ██┐ ██┐ █┐   █┐ ██████┐                           │
  442. │                           ██│ ██│ ██┐ ██│ ██┌───┘                           │
  443. │                           └████┌┘ ██████│ █████┐                            │
  444. │                            └██┌┘  ██┌─██│ └───██┐                           │
  445. │                             ██│   ██│ ██│ █████┌┘                           │
  446. │                             └─┘   └─┘ └─┘ └────┘                            │
  447. │                   █    ██▀▀▀       █▀▀█  █▀▀▀█ █▀▀▀▀ █  ▄▀                  │
  448. │                   ██   ▀▀▀▀█       ██▀▀█ ██▀▀█ ██    ██▀▄                   │
  449. │                   ▀▀   ▀▀▀▀▀       ▀▀▀▀▀ ▀▀  ▀ ▀▀▀▀▀ ▀▀  ▀                  │
  450. │                                                                             │
  451. └─────────────────────────────────────────────────────────────────────────────┘
  452.  
  453.  
  454.  
  455.  
  456.     Well, it seems that BEFORE I acheive the YM4 format loading rout, some
  457. of you (particulary Mage!) ask me to change a bit the format to add extra
  458. information. So here is YM5 format: (the YM4 is obsolete now)
  459.  
  460.  
  461.     Offset    Size    Type        Comment
  462.     0    4    DWORD        ID of YM5 format. ('YM5!')
  463.     4    8    string[8]    Check String ('LeOnArD!')
  464.     12    4    DWORD        Nb of valid VBL of the file.
  465.     16    4    DWORD        Song attributes (see bellow)
  466.     20    2    WORD        Nb of digi-drum sample (can be 0)
  467.     22    4    DWORD        YM2149 External frequency in Hz
  468.                     (ex:2000000 for ATARI-ST version,
  469.                         1000000 for AMSTRAD CPC)
  470.     26    2    WORD        Player frequency in Hz
  471.                     (Ex: 50Hz for almost player)
  472.     28    4    DWORD        Vbl number to loop the song.
  473.                     (0 is default)
  474.     32    2    WORD        Size (in bytes) of futur
  475.                     additinal data.
  476.                     (must be 0 for the moment)
  477.  
  478.     For each digidrum sample:
  479.     {
  480.     ..    4    DWORD        sample size
  481.         ..      ?       BYTES           sample data (8bits per sample)
  482.     }
  483.  
  484.     ..    ?    NT-String    Name of the song.
  485.     ..    ?    NT-String    Name of the author.
  486.     ..    ?    NT-String    Comments (YM file converter ?!)
  487.     ..    ?            All YM2149 registers.
  488.     ..    4    DWORD        End-File check. ('End!')
  489.  
  490.  
  491.     Ok, YM4 Expert had notice there is no major change.
  492.  
  493.  
  494.  
  495.  
  496.  
  497. 4) Pfff....
  498. -----------
  499.  
  500.         That's all for the YM4 format wich allow you to encode most
  501. of the demo-soundchip from the ATARI. If some of you think the file format is
  502. a bit hard to assume I agree with you. I only prefer a complex but shorter
  503. format than simple and big one...
  504.  
  505.     If you have any trouble, problem or questions about YM3 or YM4 format,
  506. write or mail me:
  507.  
  508. Internet E-Mail:
  509.         leonard@mygale.org
  510.  
  511. WEB Page:
  512.     http://www.mygale.org/09/leonard
  513.  
  514. ------------------------------------------------------------------------------
  515.  
  516.                 Have a nice day !
  517.  
  518. ------------------------------------------------------------------------------
  519.  
  520.